home *** CD-ROM | disk | FTP | other *** search
/ Almathera Ten Pack 3: CDPD 3 / Almathera Ten on Ten - Disc 3: CDPD3.iso / fish / 726-750 / 729 / bbbbs / bbbbs54.lzh / rexx / bbsMAINT.baud < prev    next >
Text File  |  1991-12-27  |  3KB  |  116 lines

  1. /* $VER: 4.3 bbsMAINT.baud 28 December 1991 (28.12.91)
  2. copyright 1990-91 Richard Lee Stockton   FREELY DISTRIBUTABLE
  3.  
  4. this will check all message dirs for oldest messages, (that don't
  5. have '!!' as the first characters), and delete a few (1%) of them
  6. This macro is called after logout IF the grand total of messages
  7. exceeds the maximum set in the CONFIG.BBS file. Note that as of 4.0
  8. messages are copied to the sysop's email drawer before deletion.
  9. */
  10.  
  11. bbspath=GETCLIP('BBS_path')
  12. msgpath=GETCLIP('BBS_msgpath')
  13.  
  14. ARG MAX_MSGS sysop .  /* sent from BBBBS.baud. MAX_MSGS=SYSTEM_MSG_LIMIT */
  15.  
  16. CALL CLOSE(STDOUT)
  17. CALL OPEN(STDOUT,'RAM:bbsMAINT.STDOUT','W')
  18.  
  19. totmsgs=0
  20. DO i=1 TO 99
  21.   totmsgs=totmsgs+WORDS(SHOWDIR(msgpath'MSG'i))
  22. END
  23. IF totmsgs<MAX_MSGS THEN EXIT(0);
  24. tot2kill=MAX_MSGS%100
  25. IF tot2kill<1 THEN tot2kill=1
  26. tot2kill=tot2kill+totmsgs-MAX_MSGS
  27.  
  28. msgs.=99999999
  29. DO i=1 TO 99
  30.   thisconf=msgpath'MSG'i
  31.   IF ~EXISTS(thisconf) THEN ITERATE i
  32.   lowmsg=countcheck('FirstMessage'i)
  33.   himsg=countcheck('LastMessage'i)
  34.   DO j=lowmsg TO himsg
  35.     IF ~EXISTS(thisconf'/'j) THEN ITERATE j
  36.     x=OPEN(f,thisconf'/'j,'R')
  37.     IF x<1 THEN ITERATE j
  38.     line=READLN(f)
  39.     IF LEFT(line,2)~='!!' THEN
  40.       DO
  41.         line=READLN(f)
  42.         line=READLN(f)
  43.         line=READLN(f)
  44.         line=READLN(f)
  45.         CALL CLOSE(f)
  46.         dateline=SPACE(WORD(line,3) WORD(line,4) WORD(line,5),1)
  47.         seqdate=norm2seq(dateline)
  48.         IF seqdate>=msgs.tot2kill THEN ITERATE i
  49.         DO k=tot2kill TO 1 BY -1
  50.           IF seqdate>msgs.k THEN LEAVE k
  51.           kk=k+1
  52.           msgs.kk=msgs.k
  53.           msgs.kk.0=msgs.k.0
  54.           msgs.k=seqdate
  55.           msgs.k.0=i'/'j
  56.         END
  57.       END
  58.     CALL CLOSE(f)
  59.   END
  60. END
  61.  
  62. DO i=1 TO tot2kill
  63.   IF msgs.i=99999999 THEN ITERATE i
  64.   x=OPEN(f,msgpath'MSG'msgs.i.0,'R')
  65.   IF x=0 THEN ITERATE i
  66.   data=READCH(f,65000)
  67.   CALL CLOSE(f)
  68.   CALL DELAY(28)
  69.   mailname='MSG'TRANSLATE(msgs.i.0,'.','/')
  70.   x=OPEN(f,bbspath'Email/'sysop'/'mailname,'W')
  71.   IF x=0 THEN ITERATE i
  72.   CALL WRITECH(f,data)
  73.   CALL CLOSE(f)
  74.   CALL DELETE(msgpath'MSG'msgs.i.0)
  75. END
  76. EXIT(0);
  77.  
  78.  
  79.  
  80. countcheck:
  81. PARSE ARG filename
  82. IF filename='' THEN RETURN;
  83. filename=bbspath'Numbers/'filename
  84. x=OPEN(f,filename,'R')
  85. IF x<1 THEN RETURN(1);
  86. cc=READLN(f)
  87. CALL CLOSE(f)
  88. RETURN(cc);
  89.  
  90.  
  91.  
  92. norm2seq:     /* takes '3 Jan 1990' and turns it into '19900103' */
  93. ARG da' 'mo' 'yr .
  94. da=da/1
  95. mo=STRIP(mo)
  96. yr=yr/1
  97. IF da<10 THEN da='0'da
  98. SELECT
  99.   WHEN mo='JAN' THEN mo='01'
  100.   WHEN mo='FEB' THEN mo='02'
  101.   WHEN mo='MAR' THEN mo='03'
  102.   WHEN mo='APR' THEN mo='04'
  103.   WHEN mo='MAY' THEN mo='05'
  104.   WHEN mo='JUN' THEN mo='06'
  105.   WHEN mo='JUL' THEN mo='07'
  106.   WHEN mo='AUG' THEN mo='08'
  107.   WHEN mo='SEP' THEN mo='09'
  108.   WHEN mo='OCT' THEN mo='10'
  109.   WHEN mo='NOV' THEN mo='11'
  110.   WHEN mo='DEC' THEN mo='12'
  111.   OTHERWISE RETURN(-1);
  112. END
  113. RETURN(yr||mo||da);
  114.  
  115. /* bbsMAINT.baud */
  116.